package br.com.ecommerce.domain.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

import br.com.ecommerce.domain.SimpleEntitySupport;

/**
 * @author marco.nascimento
 * @see PessoaFisica
 */
@Entity
public class Cliente extends SimpleEntitySupport<Long> {
    private static final long serialVersionUID = 6500565206251931198L;
    
    public Cliente() {
        dadosCadastrais = new PessoaFisica();
    }
    
    public Cliente(PessoaFisica pessoaFisica) {
        dadosCadastrais = pessoaFisica;
    }
    
    @Id
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id", unique = true, nullable = false)
    protected PessoaFisica dadosCadastrais;
    
    @Column(name = "email", nullable = false, length = 80)
    private String email;
    
    @Column(name = "notificarEmail", nullable = false)
    private boolean notificarEmail = true;
    
    @Column(name = "notificarSMS", nullable = false)
    private boolean notificarSMS = true;
    
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public boolean isNotificarEmail() {
        return notificarEmail;
    }

    public void setNotificarEmail(boolean notificarEmail) {
        this.notificarEmail = notificarEmail;
    }

    public boolean isNotificarSMS() {
        return notificarSMS;
    }

    public void setNotificarSMS(boolean notificarSMS) {
        this.notificarSMS = notificarSMS;
    }
    
    @Override
    public Serializable getIdentifier() {
        return dadosCadastrais.getIdentifier();
    }
    
    public String getCpf() {
        return dadosCadastrais.getCpf();
    }

    public void setCpf(String cpf) {
        dadosCadastrais.setCpf(cpf);
    }

    public String getNome() {
        return dadosCadastrais.getNome();
    }

    public void setNome(String nome) {
        dadosCadastrais.setNome(nome);
    }

    public Date getDataNascimento() {
        return dadosCadastrais.getDataNascimento();
    }

    public void setDataNascimento(Date dataNascimento) {
        dadosCadastrais.setDataNascimento(dataNascimento);
    }
    
    public Endereco getEndereco() {
        return dadosCadastrais.getEndereco();
    }

    public void setEndereco(Endereco endereco) {
        dadosCadastrais.setEndereco(endereco);
    }

    public Telefone getTelefone() {
        return dadosCadastrais.getTelefone();
    }

    public void setTelefone(Telefone telefone) {
        dadosCadastrais.setTelefone(telefone);
    }

    public Telefone getTelefoneAlternativo() {
        return dadosCadastrais.getTelefoneAlternativo();
    }

    public void setTelefoneAlternativo(Telefone telefoneAlternativo) {
        dadosCadastrais.setTelefoneAlternativo(telefoneAlternativo);
    }

    public Long getId() {
        return dadosCadastrais.getId();
    }

    public void setId(Long id) {
        dadosCadastrais.setId(id);
    }
}